package com.sgd.cli.pattern;

/**
 * <p>Title: 客户端（相当于使用遥控器的人）</p>
 * <p>Description: 将命令对象与设备关联，并将命令对象传递给调用者（遥控器）</p>
 *
 * @author su.gd
 * @date 2023-11-22
 */
public class Client {
    public static void main(String[] args) {
        // 创建接受者对象
        Device tv = new Device("TV");
        Device stereo = new Device("Stereo");

        // 创建具体的命令对象，可以绑定不同的设备
        TurnonCommand turnOn = new TurnonCommand(tv);
        TurnoffCommand turnOff = new TurnoffCommand(stereo);

        // 创建调用者
        RemoteControl remote = new RemoteControl();

        // 执行命令
        remote.setCommand(turnOn);
        remote.pressButton();
        remote.storageHistory();

        remote.setCommand(turnOff);
        remote.pressButton();
        remote.storageHistory();

        for (Command command : RemoteControl.list) {
            System.out.println(command);
        }
        System.out.println(RemoteControl.list.size());

        // 执行撤销操作
        remote.undo();
        for (Command command : RemoteControl.list) {
            System.out.println(command);
        }
        System.out.println(RemoteControl.list.size());
    }
}
